// 预览区域代码块可切换语言功能: https://github.com/Tencent/cherry-markdown/issues/433;

export const CODE_PREVIEWER_LANG_SELECT_CLASS_NAME = 'cherry-code-preview-lang-select';

/**
 * 生成preview区域的代码语言设置区域
 */
export const getCodePreviewLangSelectElement = (lang) => {
  const optionsElement = codePreviewLangSelectList.map((item) => {
    if (lang === item) {
      return `<option value="${item}" selected="selected">${item}</option>`;
    }
    return `<option value="${item}">${item}</option>`;
  });
  return `<select id="code-preview-lang-select" class="${CODE_PREVIEWER_LANG_SELECT_CLASS_NAME}">
      <option value="" selected disabled hidden>Choose here</option>
      ${optionsElement.join('')}
    </select>`;
};

const allCodeLangPrismSupport = [
  'javascript',
  'typescript',
  'html',
  'css',
  'shell',
  'python',
  'golang',
  'java',
  'c',
  'c++',
  'c#',
  'php',
  'ruby',
  'swift',
  'kotlin',
  'scala',
  'rust',
  'dart',
  'elixir',
  'haskell',
  'lua',
  'perl',
  'r',
  'sql',
  'xml',
  'svg',
  // TODO: 后续可以取Prism.languages，而不是人工维护了
  'adoc',
  'asciidoc',
  'asm6502',
  'aspnet',
  'atom',
  'awk',
  'bash',
  'basic',
  'batch',
  'c',
  'clike',
  'cmake',
  'context',
  'cpp',
  'cs',
  'csharp',
  'css',
  'csv',
  'dart',
  'diff',
  'django',
  'dns-zone',
  'dns-zone-file',
  'docker',
  'dockerfile',
  'dotnet',
  'extend',
  'ftl',
  'gawk',
  'git',
  'glsl',
  'go',
  'go-mod',
  'go-module',
  'graphql',
  'haml',
  'html',
  'http',
  'ini',
  'insertBefore',
  'java',
  'javadoc',
  'javadoclike',
  'javascript',
  'javastacktrace',
  'jinja2',
  'js',
  'jsdoc',
  'json',
  'json5',
  'jsonp',
  'jsstacktrace',
  'jsx',
  'latex',
  'ld',
  'less',
  'linker-script',
  'lua',
  'makefile',
  'markdown',
  'markup',
  'markup-templating',
  'mathml',
  'matlab',
  'md',
  'mermaid',
  'mongodb',
  'nasm',
  'nginx',
  'nsis',
  'objc',
  'objectivec',
  'objectpascal',
  'pascal',
  'perl',
  'php',
  'phpdoc',
  'plain',
  'plaintext',
  'plant-uml',
  'plantuml',
  'plsql',
  'powershell',
  'properties',
  'protobuf',
  'py',
  'python',
  'r',
  'rb',
  'regex',
  'rss',
  'ruby',
  'rust',
  'sas',
  'sass',
  'scala',
  'scheme',
  'scss',
  'sh-session',
  'shell',
  'shell-session',
  'shellsession',
  'smali',
  'splunk-spl',
  'sql',
  'ssml',
  'svg',
  'swift',
  'systemd',
  'tex',
  'text',
  'textile',
  'ts',
  'tsx',
  'txt',
  'typescript',
  'uri',
  'url',
  'vb',
  'vba',
  'vbnet',
  'vim',
  'visual-basic',
  'wasm',
  'webmanifest',
  'wiki',
  'xml',
  'yaml',
  'yml',
];

// program language list:
export const codePreviewLangSelectList = allCodeLangPrismSupport.filter(
  (item, index) => allCodeLangPrismSupport.indexOf(item) === index,
);
